// 导航守卫
// 对登录页面做拦截处理

import router from '@/router'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

// befoEach 前置守卫  任何路由进入前它都会执行
// 三个参数：to:要去的路由  from：从哪里来的路由   next：是否允许通过
/* 判断有没有token
   有token：进入的页面是login页，跳转到首页
            进入的页面是非login页，再判断有没有用户信息（1.定义api 2.导入调用（vuex并存储用户信息） 3.在导航守卫触发 ）
            如果有用户信息：正常进入
            没有：去获取完用户信息后再正常进入

   没有token：判断要进入的页面是否是白名单页面（不需要登录就能进入的页面）
             如果是：正常进入
             如果不是：跳转到login页        
*/
import store from '@/store' // store === this.$store
// 设置一个白名单
const whitePage = ['/404', '/login']
router.beforeEach(async (to, from, next) => {
  NProgress.start()
  // 判断路由是否存在
  console.log(store.state.user.token)
  if (store.state.user.token) {
    // 路由存在，进入的页面是login页，跳转到首页  toLowerCase()统一用小写的形式，防止了用大写也可以跳转
    if (to.path.toLowerCase() === '/login') {
      next('/')
    } else {
      // 进入的页面是非login页，判断是否有用户信息
      if (store.state.user.userInfo.userId) {
        next()
      } else {
        await store.dispatch('user/getUserInfo')
        next()
      }
    }
  } else {
    // 路由不存在,判断要进入的页面是否在白名单中
    if (whitePage.includes(to.path.toLowerCase())) {
      //  包含就通过
      next()
    } else {
      // 不包含，就跳转到登录页面
      next('/login')
    }
  }
  NProgress.done()
})

router.afterEach(() => {
  NProgress.done()
})
